import { Dictionary } from "../../ADCore/Common/Dictionary";
import { JSONObject } from "../../ADCore/Common/JSONReturn";
import ADQ from "../../ADCore/Core/ADQ";
import CloneTools from "../../ADCore/Utils/CloneTools";
import { DataType } from "./DataType";

/**
 * 数据读取器
 */
export class DataTypeReader {
    public static Instance: DataTypeReader = new DataTypeReader();

    apiList: Dictionary<DataType, string>;
    constructor() {
        this.setApiList();
    }
    private setApiList() {
        this.apiList = new Dictionary<DataType, string>();
        for (var key in DataType) {
            var index = parseInt(key);
            var name = DataType[index];
            this.apiList.set(index, "/api/" + name);
        }
    }
    getApi(type: DataType) {
        return this.apiList.get(type);
    }
    /**
     * 获取初始化数据接口 
     */
    getApiList() {
        return this.apiList;
    }
    /**通过数据类型读取接口 */
    static get(type: DataType):string {
        return DataTypeReader.Instance.getApi(type);
    }
    /**通过数据类型读取接口列表 */
    static list(type: DataType):Dictionary<DataType, string> {
        return DataTypeReader.Instance.apiList;
    }
    /**
     * 自动绑定数据
     * @param data 数据源
     * @param type 绑定类型
     * @param callback 回调数据
     */
    static bind(data:any,type: DataType,callback?,api?:string){
        ADQ.Http.get<JSONObject>(DataTypeReader.get(type)).then(result=>{
            callback(result);
            if(result.data){
                CloneTools.objectTransform(data,result.data); 
            } 
        });
    }
       /**
     * 自动绑定数组数据
     * @param data 数据源
     * @param type 绑定类型
     * @param callback 回调数据
     */
    static bindArray(data:any,type: DataType,callback?,api?:string){
        ADQ.Http.get<JSONObject>(DataTypeReader.get(type)).then(result=>{
            callback(result);
            if(result.data){
                CloneTools.objectTransform(data,result.data); 
            } 
        });
    }
       /**
     * 通过http获取数据
     * @param type 绑定类型
     * @param callback 回调数据
     */
    static getByHttp (type: DataType,callback?){
        ADQ.Http.get<JSONObject>(DataTypeReader.get(type)).then(result=>{
            callback(result); 
        });
    }
      
}